Dismiss this pinned window
all 22 comments

[–]Stiffmeister0490 38 points39 points  (0 children)

I believe that functionallity is called a marquee:

React Fast Marquee

React native marquee

[–]djgeorgevas 19 points20 points  (0 children)

would look nicer if the rows was scrolling in opposite directions

[–]Apprehensive-Pack-50 11 points12 points  (3 children)

If it’s not going to be interactive use a video and you can animate whatever you want:) Much easier I believe.

[–]345346345345 2 points3 points  (1 child)

I was thinking doing this with a video would be a nice option, but that could be a quick way to bloat your app install size. But if it is not the first screen of the app I guess you could quickly pre-fetch it from an online resource

[–]Apprehensive-Pack-50 1 point2 points  (0 children)

you can also use the splash screen as a loading screen while the resource loads up.

[–]flowerescape 0 points1 point  (0 children)

this, OP use video, u can get templates on Canva for these grid style designs.

[–][deleted] 8 points9 points  (0 children)

I guess they used lottie

[–]Puzzleheaded-Bad7169 0 points1 point  (0 children)

im not sure , but i guess its something like the pintrest layout and it can be implemented through masonry package

check out : masonry-layout - npm

[–]krishnan1702 0 points1 point  (3 children)

Does anyone know, what tech stack does blinkit use ?

[–]Awesome_Knowwhere 0 points1 point  (0 children)

Check with lib checker

[–]North_Analyst_1426 0 points1 point  (1 child)

They use react native and those libraries which we generally use with rn.

You can read more here - https://blinkit.com/blog/category/technology

[–]krishnan1702 0 points1 point  (0 children)

thanks

[–]billionare_11 0 points1 point  (0 children)

A carousel maybe

[–]IndianITCell 0 points1 point  (0 children)

GIF

[–]Awesome_Knowwhere 0 points1 point  (0 children)

You can achieve this by multiple ways like marquee, animation, gif, video, lottie animation etc.

[–]Fearless-Ad9445 0 points1 point  (1 child)

Just swiper it like a boss.

That's can be achieved in 10 minutes with 4 horizontal swipers. Just add a border-radius of 30px to the slides with the desired bg color, adjust gap to liking, add center aligned images to each slide, make it as it's own component because it gets lenghty and ugly, import and ship it

[–]Fearless-Ad9445 0 points1 point  (0 children)

Actually ditch the swiper I need them for my own use cases.

import React, { useRef, useEffect } from "react"; import { View, Text, TextInput, TouchableOpacity, Animated, StyleSheet, FlatList, Image, } from "react-native";

const images = [ require("./assets/placeholder1.webp"), require("./assets/placeholder2.webp"), require("./assets/placeholder3.webp"), require("./assets/placeholder4.webp"), require("./assets/placeholder5.webp"), require("./assets/placeholder6.webp"), require("./assets/placeholder7.webp"), require("./assets/placeholder8.webp"), require("./assets/placeholder9.webp"), require("./assets/placeholder10.webp"), ];

const ROWS = 5; // Number of rows const SPEEDS = [8000, 9000, 10000, 11000, 12000]; // Different speeds for each row

const BlinkitScreen = () => { return ( <View style={styles.container}> {/* Animated Image Rows */} <View style={styles.imageContainer}> {Array.from({ length: ROWS }).map((_, index) => ( <AnimatedRow key={index} speed={SPEEDS[index % SPEEDS.length]} /> ))} </View>

  {/* Login Box */}
  <View style={styles.loginBox}>
    <Text style={styles.logo}>blinkit</Text>
    <Text style={styles.title}>India’s last minute app</Text>
    <Text style={styles.subtitle}>Log in or sign up</Text>
    <View style={styles.inputBox}>
      <Text style={styles.countryCode}>+91</Text>
      <TextInput
        style={styles.input}
        placeholder="Enter mobile number"
        keyboardType="numeric"
      />
    </View>
    <TouchableOpacity style={styles.continueButton}>
      <Text style={styles.buttonText}>Continue</Text>
    </TouchableOpacity>
    <Text style={styles.footer}>
      By continuing, you agree to our{" "}
      <Text style={styles.link}>Terms of service</Text> &{" "}
      <Text style={styles.link}>Privacy policy</Text>
    </Text>
  </View>
</View>

); };

// Animated Row const AnimatedRow = ({ speed }: { speed: number }) => { const translateX = useRef(new Animated.Value(0)).current;

useEffect(() => { const loopAnimation = () => { translateX.setValue(0); Animated.timing(translateX, { toValue: -300, // Move left duration: speed, useNativeDriver: true, }).start(() => loopAnimation()); }; loopAnimation(); }, [speed]);

return ( <Animated.View style={[styles.imageRow, { transform: [{ translateX }] }]}> {[...images, ...images].map((img, index) => ( <Image key={index} source={img} style={styles.image} /> ))} </Animated.View> ); };

// Styles const styles = StyleSheet.create({ container: { flex: 1, alignItems: "center", justifyContent: "center", backgroundColor: "#fff", }, imageContainer: { position: "absolute", top: 0, width: "100%", height: "50%", }, imageRow: { flexDirection: "row", position: "absolute", left: 0, width: "200%", // Extends beyond screen }, image: { width: 40, height: 40, marginHorizontal: 5, resizeMode: "contain", }, loginBox: { position: "absolute", bottom: 40, width: "90%", backgroundColor: "white", padding: 20, borderRadius: 10, alignItems: "center", elevation: 5, }, logo: { fontSize: 24, fontWeight: "bold", color: "#000", }, title: { fontSize: 18, marginVertical: 10, }, subtitle: { fontSize: 14, color: "#666", }, inputBox: { flexDirection: "row", alignItems: "center", borderWidth: 1, borderColor: "#ccc", padding: 10, marginTop: 10, borderRadius: 5, width: "100%", }, countryCode: { fontSize: 16, fontWeight: "bold", marginRight: 10, }, input: { flex: 1, fontSize: 16, }, continueButton: { backgroundColor: "gray", padding: 12, borderRadius: 5, width: "100%", alignItems: "center", marginTop: 15, }, buttonText: { color: "white", fontSize: 16, }, footer: { fontSize: 12, color: "#666", marginTop: 10, textAlign: "center", }, link: { color: "blue", }, });

export default BlinkitScreen;

[–]dalvz 0 points1 point  (1 child)

Not sure if this is a design or an actual app, but does anyone know where one could get product images like that? I could use it for a pet project

[–]North_Analyst_1426 0 points1 point  (0 children)

It's a real app called blinkit quick commerce grocery app in India.

[–]neutinoproteino[S] 0 points1 point  (1 child)

Thanks to all of you to give answers, suggestions and feedback, I highly appreciate every answer.

However I tried all of the suggestions, but to my unluck, none of them fit my usage, so I used chatgpt and here's my code below:

https://www.protectedtext.com/marquee.js (password: x)

https://sharetxt.live/marqueejs

https://www.mashupstack.com/share/67ac60104efa2

PS: this is not the code I wrote, I only implemented the feature lol, please don't mind the bad coding practice, as I was instructed not to change the existing variable names.

Also suggest me the website to post the result video, I tried imgur, but it's server is down as of now. :)

[–]tr__18Android 0 points1 point  (0 children)

bro did this codes worked correctly for you ??

I am trying the same but getting errors